Skip to content

chore(scorecard): add startTestBackend module tests for all 9 backend modules - #4581

Open
teknaS47 wants to merge 4 commits into
redhat-developer:mainfrom
teknaS47:scorecard-modules-backend
Open

teknaS47 wants to merge 4 commits into
redhat-developer:mainfrom
teknaS47:scorecard-modules-backend

Conversation

@teknaS47

@teknaS47 teknaS47 commented Sep 4, 2026

Copy link
Copy Markdown
Member

Hey, I just made a Pull Request!

RHIDP-15181

Adds startTestBackend integration tests for all 9 scorecard backend modules. Each test verifies
that the module registers its metric providers (and collectors, where applicable) with the scorecard
plugin at runtime without errors.

Follow-up to the scorecard backend POC in #3414

What's included

  • 9 new module.test.ts files - one per module, each using startTestBackend with scorecardPlugin + the module under test
  • 9 updated package.json files - adds supertest, @types/supertest, @backstage/plugin-catalog-node, and scorecard-backend as devDependencies
  • yarn.lock updated for the new dependencies

Modules covered

Module Metrics verified Notes
openssf 18 —
code-coverage 8 —
dependabot 4 —
sonarqube 12 —
dora 4 Uses scorecardCollectorsServiceRef
github 1 + 3 collectors —
jira 1 + 1 collector Requires minimal jira config
catalog config-driven Tests with and without config
filecheck config-driven Tests with and without config

✔️ Checklist

  • A changeset describing the change and affected packages. (more info)
  • Added or Updated documentation
  • Tests for new functionality and regression tests for bug fixes
  • Screenshots attached (for UI changes)

@rhdh-gh-app

rhdh-gh-app Bot commented Sep 4, 2026 •

Copy link
Copy Markdown

Missing Changesets

The following package(s) are changed by this PR but do not have a changeset:

  • @red-hat-developer-hub/backstage-plugin-scorecard-backend-module-catalog
  • @red-hat-developer-hub/backstage-plugin-scorecard-backend-module-code-coverage
  • @red-hat-developer-hub/backstage-plugin-scorecard-backend-module-dependabot
  • @red-hat-developer-hub/backstage-plugin-scorecard-backend-module-dora
  • @red-hat-developer-hub/backstage-plugin-scorecard-backend-module-filecheck
  • @red-hat-developer-hub/backstage-plugin-scorecard-backend-module-github
  • @red-hat-developer-hub/backstage-plugin-scorecard-backend-module-jira
  • @red-hat-developer-hub/backstage-plugin-scorecard-backend-module-openssf
  • @red-hat-developer-hub/backstage-plugin-scorecard-backend-module-sonarqube

See CONTRIBUTING.md for more information about how to add changesets.

Changed Packages

Package Name Package Path Changeset Bump Current Version
@red-hat-developer-hub/backstage-plugin-scorecard-backend-module-catalog workspaces/scorecard/plugins/scorecard-backend-module-catalog none v0.1.3
@red-hat-developer-hub/backstage-plugin-scorecard-backend-module-code-coverage workspaces/scorecard/plugins/scorecard-backend-module-code-coverage none v0.1.3
@red-hat-developer-hub/backstage-plugin-scorecard-backend-module-dependabot workspaces/scorecard/plugins/scorecard-backend-module-dependabot none v1.1.3
@red-hat-developer-hub/backstage-plugin-scorecard-backend-module-dora workspaces/scorecard/plugins/scorecard-backend-module-dora none v0.2.1
@red-hat-developer-hub/backstage-plugin-scorecard-backend-module-filecheck workspaces/scorecard/plugins/scorecard-backend-module-filecheck none v1.1.3
@red-hat-developer-hub/backstage-plugin-scorecard-backend-module-github workspaces/scorecard/plugins/scorecard-backend-module-github none v4.4.1
@red-hat-developer-hub/backstage-plugin-scorecard-backend-module-jira workspaces/scorecard/plugins/scorecard-backend-module-jira none v4.4.1
@red-hat-developer-hub/backstage-plugin-scorecard-backend-module-openssf workspaces/scorecard/plugins/scorecard-backend-module-openssf none v1.1.3
@red-hat-developer-hub/backstage-plugin-scorecard-backend-module-sonarqube workspaces/scorecard/plugins/scorecard-backend-module-sonarqube none v4.4.1

@fullsend-ai-review

fullsend-ai-review Bot commented Sep 4, 2026 •

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 12:01 PM UTC · Completed 12:15 PM UTC

Commit: b8435fd · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Cost: $5.09

@codecov

codecov Bot commented Sep 4, 2026 •

Copy link
Copy Markdown

❌ 27 Tests Failed:

Tests completed Failed Passed Skipped
2213 27 2186 0
View the top 3 failed test(s) by shortest run time
 Test execution failure: could be caused by test hooks like 'afterAll'.
Stack Traces | 0s run time
{"message":"","stack":"TypeError: Cannot read properties of undefined (reading 'close')\n    at Object.close (.../scorecard-backend-module-catalog/src/module.test.ts:48:14)\n    at Promise.finally.completed (.../jest-circus/build/jestAdapterInit.js:1557:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (.../jest-circus/build/jestAdapterInit.js:1497:10)\n    at _callCircusHook (.../jest-circus/build/jestAdapterInit.js:976:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:891:7)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:857:11)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:857:11)\n    at run (.../jest-circus/build/jestAdapterInit.js:761:3)\n    at runAndTransformResultsToJestFormat (.../jest-circus/build/jestAdapterInit.js:1918:21)\n    at jestAdapter (.../jest-circus/build/runner.js:101:19)\n    at runTestInternal (.../jest-runner/build/testWorker.js:275:16)\n    at runTest (.../jest-runner/build/testWorker.js:343:7)\n    at Object.worker (.../jest-runner/build/testWorker.js:497:12)\nTypeError: Cannot read properties of undefined (reading 'close')\n    at Object.close (.../scorecard-backend-module-catalog/src/module.test.ts:97:14)\n    at Promise.finally.completed (.../jest-circus/build/jestAdapterInit.js:1557:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (.../jest-circus/build/jestAdapterInit.js:1497:10)\n    at _callCircusHook (.../jest-circus/build/jestAdapterInit.js:976:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:891:7)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:857:11)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:857:11)\n    at run (.../jest-circus/build/jestAdapterInit.js:761:3)\n    at runAndTransformResultsToJestFormat (.../jest-circus/build/jestAdapterInit.js:1918:21)\n    at jestAdapter (.../jest-circus/build/runner.js:101:19)\n    at runTestInternal (.../jest-runner/build/testWorker.js:275:16)\n    at runTest (.../jest-runner/build/testWorker.js:343:7)\n    at Object.worker (.../jest-runner/build/testWorker.js:497:12)"}
 Test execution failure: could be caused by test hooks like 'afterAll'.
Stack Traces | 0s run time
{"message":"","stack":"TypeError: Cannot read properties of undefined (reading 'close')\n    at Object.close (.../scorecard-backend-module-dependabot/src/module.test.ts:47:12)\n    at Promise.finally.completed (.../jest-circus/build/jestAdapterInit.js:1557:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (.../jest-circus/build/jestAdapterInit.js:1497:10)\n    at _callCircusHook (.../jest-circus/build/jestAdapterInit.js:976:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:891:7)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:857:11)\n    at run (.../jest-circus/build/jestAdapterInit.js:761:3)\n    at runAndTransformResultsToJestFormat (.../jest-circus/build/jestAdapterInit.js:1918:21)\n    at jestAdapter (.../jest-circus/build/runner.js:101:19)\n    at runTestInternal (.../jest-runner/build/testWorker.js:275:16)\n    at runTest (.../jest-runner/build/testWorker.js:343:7)\n    at Object.worker (.../jest-runner/build/testWorker.js:497:12)"}
 Test execution failure: could be caused by test hooks like 'afterAll'.
Stack Traces | 0s run time
{"message":"","stack":"TypeError: Cannot read properties of undefined (reading 'close')\n    at Object.close (.../scorecard-backend-module-openssf/src/module.test.ts:47:12)\n    at Promise.finally.completed (.../jest-circus/build/jestAdapterInit.js:1557:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (.../jest-circus/build/jestAdapterInit.js:1497:10)\n    at _callCircusHook (.../jest-circus/build/jestAdapterInit.js:976:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:891:7)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:857:11)\n    at run (.../jest-circus/build/jestAdapterInit.js:761:3)\n    at runAndTransformResultsToJestFormat (.../jest-circus/build/jestAdapterInit.js:1918:21)\n    at jestAdapter (.../jest-circus/build/runner.js:101:19)\n    at runTestInternal (.../jest-runner/build/testWorker.js:275:16)\n    at runTest (.../jest-runner/build/testWorker.js:343:7)\n    at Object.worker (.../jest-runner/build/testWorker.js:497:12)"}
 Test execution failure: could be caused by test hooks like 'afterAll'.
Stack Traces | 0s run time
{"message":"","stack":"TypeError: Cannot read properties of undefined (reading 'close')\n    at Object.close (.../scorecard-backend-module-github/src/module.test.ts:47:12)\n    at Promise.finally.completed (.../jest-circus/build/jestAdapterInit.js:1557:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (.../jest-circus/build/jestAdapterInit.js:1497:10)\n    at _callCircusHook (.../jest-circus/build/jestAdapterInit.js:976:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:891:7)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:857:11)\n    at run (.../jest-circus/build/jestAdapterInit.js:761:3)\n    at runAndTransformResultsToJestFormat (.../jest-circus/build/jestAdapterInit.js:1918:21)\n    at jestAdapter (.../jest-circus/build/runner.js:101:19)\n    at runTestInternal (.../jest-runner/build/testWorker.js:275:16)\n    at runTest (.../jest-runner/build/testWorker.js:343:7)\n    at Object.worker (.../jest-runner/build/testWorker.js:497:12)"}
 Test execution failure: could be caused by test hooks like 'afterAll'.
Stack Traces | 0s run time
{"message":"","stack":"TypeError: Cannot read properties of undefined (reading 'close')\n    at Object.close (.../scorecard-backend-module-dora/src/module.test.ts:47:12)\n    at Promise.finally.completed (.../jest-circus/build/jestAdapterInit.js:1557:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (.../jest-circus/build/jestAdapterInit.js:1497:10)\n    at _callCircusHook (.../jest-circus/build/jestAdapterInit.js:976:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:891:7)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:857:11)\n    at run (.../jest-circus/build/jestAdapterInit.js:761:3)\n    at runAndTransformResultsToJestFormat (.../jest-circus/build/jestAdapterInit.js:1918:21)\n    at jestAdapter (.../jest-circus/build/runner.js:101:19)\n    at runTestInternal (.../jest-runner/build/testWorker.js:275:16)\n    at runTest (.../jest-runner/build/testWorker.js:343:7)\n    at Object.worker (.../jest-runner/build/testWorker.js:497:12)"}
 Test execution failure: could be caused by test hooks like 'afterAll'.
Stack Traces | 0s run time
{"message":"","stack":"TypeError: Cannot read properties of undefined (reading 'close')\n    at Object.close (.../scorecard-backend-module-sonarqube/src/module.test.ts:47:12)\n    at Promise.finally.completed (.../jest-circus/build/jestAdapterInit.js:1557:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (.../jest-circus/build/jestAdapterInit.js:1497:10)\n    at _callCircusHook (.../jest-circus/build/jestAdapterInit.js:976:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:891:7)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:857:11)\n    at run (.../jest-circus/build/jestAdapterInit.js:761:3)\n    at runAndTransformResultsToJestFormat (.../jest-circus/build/jestAdapterInit.js:1918:21)\n    at jestAdapter (.../jest-circus/build/runner.js:101:19)\n    at runTestInternal (.../jest-runner/build/testWorker.js:275:16)\n    at runTest (.../jest-runner/build/testWorker.js:343:7)\n    at Object.worker (.../jest-runner/build/testWorker.js:497:12)"}
 Test execution failure: could be caused by test hooks like 'afterAll'.
Stack Traces | 0s run time
{"message":"","stack":"TypeError: Cannot read properties of undefined (reading 'close')\n    at Object.close (.../scorecard-backend-module-jira/src/module.test.ts:52:12)\n    at Promise.finally.completed (.../jest-circus/build/jestAdapterInit.js:1557:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (.../jest-circus/build/jestAdapterInit.js:1497:10)\n    at _callCircusHook (.../jest-circus/build/jestAdapterInit.js:976:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:891:7)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:857:11)\n    at run (.../jest-circus/build/jestAdapterInit.js:761:3)\n    at runAndTransformResultsToJestFormat (.../jest-circus/build/jestAdapterInit.js:1918:21)\n    at jestAdapter (.../jest-circus/build/runner.js:101:19)\n    at runTestInternal (.../jest-runner/build/testWorker.js:275:16)\n    at runTest (.../jest-runner/build/testWorker.js:343:7)\n    at Object.worker (.../jest-runner/build/testWorker.js:497:12)"}
 Test execution failure: could be caused by test hooks like 'afterAll'.
Stack Traces | 0s run time
{"message":"","stack":"TypeError: Cannot read properties of undefined (reading 'close')\n    at Object.close (.../scorecard-backend-module-filecheck/src/module.test.ts:48:14)\n    at Promise.finally.completed (.../jest-circus/build/jestAdapterInit.js:1557:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (.../jest-circus/build/jestAdapterInit.js:1497:10)\n    at _callCircusHook (.../jest-circus/build/jestAdapterInit.js:976:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:891:7)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:857:11)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:857:11)\n    at run (.../jest-circus/build/jestAdapterInit.js:761:3)\n    at runAndTransformResultsToJestFormat (.../jest-circus/build/jestAdapterInit.js:1918:21)\n    at jestAdapter (.../jest-circus/build/runner.js:101:19)\n    at runTestInternal (.../jest-runner/build/testWorker.js:275:16)\n    at runTest (.../jest-runner/build/testWorker.js:343:7)\n    at Object.worker (.../jest-runner/build/testWorker.js:497:12)\nTypeError: Cannot read properties of undefined (reading 'close')\n    at Object.close (.../scorecard-backend-module-filecheck/src/module.test.ts:93:14)\n    at Promise.finally.completed (.../jest-circus/build/jestAdapterInit.js:1557:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (.../jest-circus/build/jestAdapterInit.js:1497:10)\n    at _callCircusHook (.../jest-circus/build/jestAdapterInit.js:976:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:891:7)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:857:11)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:857:11)\n    at run (.../jest-circus/build/jestAdapterInit.js:761:3)\n    at runAndTransformResultsToJestFormat (.../jest-circus/build/jestAdapterInit.js:1918:21)\n    at jestAdapter (.../jest-circus/build/runner.js:101:19)\n    at runTestInternal (.../jest-runner/build/testWorker.js:275:16)\n    at runTest (.../jest-runner/build/testWorker.js:343:7)\n    at Object.worker (.../jest-runner/build/testWorker.js:497:12)"}
 Test execution failure: could be caused by test hooks like 'afterAll'.
Stack Traces | 0s run time
{"message":"","stack":"TypeError: Cannot read properties of undefined (reading 'close')\n    at Object.close (.../scorecard-backend-module-code-coverage/src/module.test.ts:47:12)\n    at Promise.finally.completed (.../jest-circus/build/jestAdapterInit.js:1557:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (.../jest-circus/build/jestAdapterInit.js:1497:10)\n    at _callCircusHook (.../jest-circus/build/jestAdapterInit.js:976:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:891:7)\n    at _runTestsForDescribeBlock (.../jest-circus/build/jestAdapterInit.js:857:11)\n    at run (.../jest-circus/build/jestAdapterInit.js:761:3)\n    at runAndTransformResultsToJestFormat (.../jest-circus/build/jestAdapterInit.js:1918:21)\n    at jestAdapter (.../jest-circus/build/runner.js:101:19)\n    at runTestInternal (.../jest-runner/build/testWorker.js:275:16)\n    at runTest (.../jest-runner/build/testWorker.js:343:7)\n    at Object.worker (.../jest-runner/build/testWorker.js:497:12)"}
scorecard-backend-module-catalog with catalog required-attributes config registers the catalog metric provider
Stack Traces | 0s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-catalog/src/module.test.ts:84:21)
scorecard-backend-module-code-coverage registers the code-coverage metric providers
Stack Traces | 0s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-code-coverage/src/module.test.ts:34:19)
scorecard-backend-module-dependabot registers all 4 dependabot metric providers
Stack Traces | 0s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-dependabot/src/module.test.ts:34:19)
scorecard-backend-module-dora registers all 4 DORA metric providers
Stack Traces | 0s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-dora/src/module.test.ts:34:19)
scorecard-backend-module-dora starts the backend with the dora module without errors
Stack Traces | 0s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-dora/src/module.test.ts:34:19)
scorecard-backend-module-filecheck with filecheck config registers the filecheck metric providers from config
Stack Traces | 0s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-filecheck/src/module.test.ts:80:21)
scorecard-backend-module-filecheck without filecheck config starts the backend without errors when no filecheck config is provided
Stack Traces | 0s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-filecheck/src/module.test.ts:35:21)
scorecard-backend-module-github registers the github.openPRs metric provider
Stack Traces | 0s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-github/src/module.test.ts:34:19)
scorecard-backend-module-github starts the backend with the github module without errors
Stack Traces | 0s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-github/src/module.test.ts:34:19)
scorecard-backend-module-jira registers the jira.openIssues metric provider
Stack Traces | 0s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-jira/src/module.test.ts:39:19)
scorecard-backend-module-jira starts the backend with the jira module without errors
Stack Traces | 0s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-jira/src/module.test.ts:39:19)
scorecard-backend-module-openssf registers all 18 OpenSSF metric providers
Stack Traces | 0s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-openssf/src/module.test.ts:34:19)
scorecard-backend-module-sonarqube registers all 12 sonarqube metric providers
Stack Traces | 0s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-sonarqube/src/module.test.ts:34:19)
scorecard-backend-module-sonarqube starts the backend with the sonarqube module without errors
Stack Traces | 0s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-sonarqube/src/module.test.ts:34:19)
scorecard-backend-module-catalog without catalog config starts the backend without errors when no catalog config is provided
Stack Traces | 0.001s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-catalog/src/module.test.ts:35:21)
scorecard-backend-module-code-coverage starts the backend with the code-coverage module without errors
Stack Traces | 0.001s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-code-coverage/src/module.test.ts:34:19)
scorecard-backend-module-dependabot starts the backend with the dependabot module without errors
Stack Traces | 0.001s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-dependabot/src/module.test.ts:34:19)
scorecard-backend-module-openssf starts the backend with the openssf module without errors
Stack Traces | 0.004s run time
BackendStartupError: Backend startup failed due to the following errors:
  Plugin 'scorecard' startup failed; caused by Error: Plugin 'scorecard' is already registered
    at BackendInitializer.#doStart (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:550:13)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at BackendInitializer.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackendInitializer.ts:384:12)
    at BackstageBackend.start (.../workspaces/scorecard/node_modules/@.../src/wiring/BackstageBackend.ts:48:12)
    at startTestBackend (.../workspaces/scorecard/node_modules/@.../src/wiring/TestBackend.ts:320:3)
    at Object.<anonymous> (.../scorecard-backend-module-openssf/src/module.test.ts:34:19)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@fullsend-ai-review

Copy link
Copy Markdown

Review

Findings

Low

  • [stale-reference] workspaces/scorecard/plugins/scorecard-backend-module-filecheck/package.json — @backstage/config removed from devDependencies, but the existing test file src/metricProviders/FilecheckMetricProvider.test.ts imports ConfigReader (a value import) from @backstage/config. The package remains available transitively through @backstage/backend-test-utils with the workspace's nodeLinker: node-modules configuration, so tests will not break in practice, but the explicit declaration should be retained for dependency hygiene.

  • [stale-reference] workspaces/scorecard/plugins/scorecard-backend-module-jira/package.json — @backstage/config and @backstage/types removed from devDependencies, but existing tests (clients/JiraClientFactory.test.ts, clients/base.test.ts) import from these packages. Same transitive availability applies via hoisted node_modules. Consider retaining these devDependencies for explicitness.


Labels: PR adds integration tests for scorecard backend modules.

@fullsend-ai-review fullsend-ai-review Bot added ready-for-merge All reviewers approved — ready to merge Tests labels Sep 4, 2026
@github-actions

Copy link
Copy Markdown
Contributor

This PR has been automatically marked as stale because it has not had recent activity from the author. It will be closed if no further activity occurs. If the PR was closed and you want it re-opened, let us know and we'll re-open the PR so that you can continue the contribution!

@github-actions github-actions Bot added stale and removed stale labels Sep 18, 2026
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-merge All reviewers approved — ready to merge Tests workspace/scorecard

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant